package com.timemetro.app;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;

import java.util.List;

import com.timemetro.app.stationObject.Station;

/**
 * Created by localadmin on 18.05.2015.
 */

/*
* Класс, предназначенный для визуализации карты*/
public class ManagerDraw {


    /*Перерисовка сцены*/
    public static void ReDraw(Canvas canvas, Matrix matrix){
        canvas.setMatrix(matrix);
//        Сначало рисуем все ветки
        DrawAllBranch(canvas);
        for (List<Station> list : ManagerStation.getAllStations().values())
            for (Station objectScene: list){
                objectScene.Draw(canvas, matrix);
        }
    }

    /*Функция рисует все ветки метро*/
    private static void DrawAllBranch(Canvas canvas) {
        for (List<Station> list : ManagerStation.getAllStations().values())
        {
            DrawBranch(list,canvas);
        }
    }

    /*Печать одной ветки метро
    * @param stationList Список станций ветки, которую необходимо вывести на экран*
    * @param canvas Полотоно для рисования*/
    private static void DrawBranch(List<Station> stationList, Canvas canvas) {
        float positionXOne = 0;
        float positionYOne = 0;
        float positionXTwo = 0;
        float positionYTwo = 0;
        int color = Color.GRAY;

        for (int i = 0; i < stationList.size(); i++)
        {
            if (i == stationList.size()-1) break;
            positionXOne = (stationList.get(i)).getPositionX();
            positionYOne = (stationList.get(i)).getPositionY();
            positionXTwo = (stationList.get(i+1)).getPositionX();
            positionYTwo = (stationList.get(i+1)).getPositionY();
            if ((stationList.get(i)).isActiveStation() && (stationList.get(i+1)).isActiveStation()){
                 color = (stationList.get(i+1)).getColorActive();
            } else {
                 color = (stationList.get(i + 1)).getColor();
            }
            Paint paintGrayBorder = new Paint(Paint.ANTI_ALIAS_FLAG);
            paintGrayBorder.setStyle(Paint.Style.FILL);
            paintGrayBorder.setStrokeWidth(12);
            paintGrayBorder.setColor(Color.GRAY);
            canvas.drawLine(positionXOne, positionYOne, positionXTwo, positionYTwo, paintGrayBorder);
            paintGrayBorder.setStrokeWidth(5);
            paintGrayBorder.setColor(color);
            canvas.drawLine(positionXOne, positionYOne, positionXTwo, positionYTwo, paintGrayBorder);
        }
    }
}
